//Generator 应用
// 案例： 发号器：自增ID，在原有的ID上加1

function * createIDMaker () {
    let id = 1
    while (true) {
        yield id++
    }
}

const idMaket = createIDMaker()

console.log(idMaket.next().value)
console.log(idMaket.next().value)
console.log(idMaket.next().value)
console.log(idMaket.next().value)

// 案例二:Iterator 方法

const todos = { // 对象结构
    life: ['吃饭','睡觉','打游戏'],
    learn: ['java','html','javascript'],
    work: ['喝茶'],
    // 对外提供一个统一的接口，对调用着而言，不用关心对象内部的结构，不用担心内部改变之后的影响
    [Symbol.iterator]: function * () {
        const all = [...this.life, ...this.learn, ...this.work]
        for(const item of all) {
            yield item
        } 
    }
}

for (const iterator of todos) {
    console.log(iterator)
}